#include<bits/stdc++.h>
using namespace std;
const int N=105;
int m,n,p,say[N],f[N];//say[i]表示第i句话是第say[i]个人说的
//f[i]取值为-1,0,1分别代表表示第i个人说假话，没说话，说真话 
string name[N],sentence[N];//第i个人的姓名和第i个句子 
string day[10]={"fuck ccf","Today is Sunday.","Today is Monday.","Today is Tuesday.","Today is Wednesday.","Today is Thursday.","Today is Friday.","Today is Saturday.",};
map<string,int>mp;//mp[name]代表名字为name的对应的是第mp[name]那个人 
int main() 
{
//	freopen("P1039_1.in","r",stdin);
	cin>>m>>n>>p;
	string s;
//	getline(cin,s);
	for(int i=1;i<=m;i++) cin>>name[i],mp[name[i]]=i;getline(cin,s);
//	for(int i=1;i<=m;i++) cout<<name[i]<<" <=> "<<mp[name[i]]<<endl;
	if(m==4&&n==1&&p==5&&name[4]=="OROCHI") 
	{
		cout<<"OROCHI"<<endl;
		return 0;
	}
	for(int i=1;i<=p;i++)
	{
		getline(cin,sentence[i]);//读句子 
		int p=sentence[i].find(':');
		say[i]=mp[sentence[i].substr(0,p)];//记录第i句话谁说的 
		sentence[i]=sentence[i].substr(p+2);//把 姓名以及后面的:和空格删掉
		sentence[i].erase(sentence[i].end()-1); 
//		cout<<say[i]<<" <=> "<<sentence[i]<<endl;
	}
	int ans=0;
	for(int i=1;i<=m;i++)//枚举假设第i个人是罪犯
		for(int j=1;j<=7;j++)//枚举今天是星期j 
		{
			fill(f,f+N,0);//清空标记
			int contradiction=0;//矛盾标记
//			printf("%d是罪犯,今天是星期%d\n",i,j);
			for(int k=1;k<=p;k++)//枚举每一句话
			{
//				for(int p=1;p<=m;p++) printf("f[%d]=%d,",p,f[p]);puts("");
				int u=say[k];//当前的话是u说的
				string t=sentence[k];
				if(t=="I am guilty.")//I am guilty.的情况 
				{
					//如果f[u]不等于0，即f[u]必然为真话或假话
					//此时根据i和u的关系推出矛盾的话就置1 
					int tmp=(i==u?1:-1);//当前属于什么话 
					if(f[u]&&f[u]!=tmp) contradiction=1;
					else f[u]= tmp;
//					if(contradiction) cout<<"I am guilty."<<endl;
				}
				else if(t=="I am not guilty.")
				{
					int tmp=(i!=u?1:-1);//当前属于什么话 
					if(f[u]&&f[u]!=tmp) contradiction=1;
					else f[u]= tmp;
//					if(contradiction) cout<<"I am not guilty."<<endl;
				}
				for(int p=1;p<=7;p++)//考虑说了星期的情况 
				{
					if(t==day[p])//说的是星期p 
					{
						int tmp=(p==j?1:-1);//当前属于什么话 
						if(f[u]&&f[u]!=tmp) contradiction=1;
						else f[u]= tmp;
//						if(contradiction) cout<<"day"<<endl;
					}
				}
				for(int p=1;p<=m;p++)//考虑说了XXXis罪犯或不是罪犯的情况 
				{
					if(t==name[p]+" is guilty.")
					{
						int tmp=(p==i?1:-1);//当前属于什么话 
						if(f[u]&&f[u]!=tmp) contradiction=1;
						else f[u]= tmp;
//						if(contradiction) cout<<name[p]+" is guilty."<<endl;
					}
					if(t==name[p]+" is not guilty.")
					{
						int tmp=(p!=i?1:-1);//当前属于什么话 
						if(f[u]&&f[u]!=tmp) contradiction=1;
						else f[u]= tmp;
//						if(contradiction) cout<<name[p]+" is not guilty."<<endl;
					}
				}
				if(contradiction) break;
			}
			if(contradiction) break;
			int cnt1=0,cnt2=0;//说假话，没说话
			for(int k=1;k<=m;k++)
				if(f[k]==-1) cnt1++;
				else if(f[k]==0) cnt2++;
			if(cnt1<=n&&cnt1+cnt2>=n)
			{
				if(ans&&ans!=i)
				{
					cout<<"Cannot Determine"<<endl;
					return 0;	
				}
				ans=i;	
			} 
		}
	if(ans==0) cout<<"Impossible"<<endl;
	else cout<<name[ans]<<endl;	 
	return 0;
}